home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic 4 Database How-To / Visual Basic 4 Database - How-to (The Waite Group)(1995).iso / odbcapi.ba_ / odbcapi.ba
Text File  |  1995-07-19  |  60KB  |  1,737 lines

  1. Attribute VB_Name = "modODBCAPI"
  2. Option Explicit
  3. Option Private Module
  4.  
  5. 'This file contains the complete set of function
  6. '   declarations and constants for the ODBC API. To save
  7. '   a significant chunk of memory, it is recommended that
  8. '   you include only the constants that apply to your
  9. '   project!
  10.  
  11. #Const ODBCVER = &H210     'The current version of ODBC
  12.  
  13. ' Miscellaneous Windows API constants:
  14. Public Const DEFAULT = 0
  15. Public Const HOURGLASS = 11
  16. Public Const MODAL = 1
  17. 'Window state
  18. Public Const NORMAL = 0     ' 0 - Normal
  19. Public Const MINIMIZED = 1 ' 1 - Minimized
  20. Public Const MAXIMIZED = 2 ' 2 - Maximized
  21.  
  22. ' Windows API functions used:
  23. #If Win32 Then
  24. Declare Function GetFocus Lib "User32" () As Long
  25. Declare Function GetParent Lib "User32" (ByVal hWnd%) As Long
  26. #Else
  27. Declare Function GetFocus Lib "User" () As Integer
  28. Declare Function GetParent Lib "User" (ByVal hWnd&) As Integer
  29. #End If
  30.  
  31. '*********************************************************
  32. ' Public variables for ODBC handles and arrays
  33. '*********************************************************
  34. Public ghEnv As Long
  35. Public ghDbc As Long
  36. Public ghStmt As Long
  37. Public Const NULL_POINTER = 0
  38.  
  39. Public Const MB_ICONSTOP = 16          ' Critical message
  40. Public Const MB_ICONQUESTION = 32      ' Warning query
  41. Public Const MB_ICONEXCLAMATION = 48   ' Warning message
  42. Public Const MB_ICONINFORMATION = 64   ' Information mess
  43.  
  44. 'There are more at the end, the ones requiring ODBC constants
  45.  
  46. '*********************************************************
  47. ' Start of ODBC API declarations
  48. '*********************************************************
  49. ' ODBC Module Core Declarations
  50. '*********************************************************
  51. '
  52. ' ODBC Core API Declarations
  53. '
  54. #If Win32 Then
  55. Declare Function SQLAllocConnect Lib "odbc32.dll" (ByVal ghEnv&, phdbc&) As Integer
  56. Declare Function SQLAllocEnv Lib "odbc32.dll" (phenv&) As Integer
  57. Declare Function SQLDisconnect Lib "odbc32.dll" (ByVal hDbc&) As Integer
  58. Declare Function SQLError Lib "odbc32.dll" (ByVal hEnv&, ByVal hDbc&, ByVal hstmt&, ByVal szSqlState$, pfNativeError&, ByVal szErrorMsg$, ByVal cbErrorMsgMax%, pcbErrorMsg&) As Integer
  59. Declare Function SQLConnect Lib "odbc32.dll" (ByVal hDbc&, ByVal szDSN$, ByVal cbDSN%, ByVal szUID$, ByVal cbUID%, ByVal szAuthStr$, ByVal cbAuthStr%) As Integer
  60. Declare Function SQLAllocStmt Lib "odbc32.dll" (ByVal hDbc&, phstmt&) As Integer
  61. Declare Function SQLFreeStmt Lib "odbc32.dll" (ByVal hstmt&, ByVal fOption%) As Integer
  62. Declare Function SQLFreeConnect Lib "odbc32.dll" (ByVal hDbc&) As Integer
  63. Declare Function SQLFreeEnv Lib "odbc32.dll" (ByVal hEnv&) As Integer
  64. #Else
  65. Declare Function SQLAllocConnect Lib "odbc.dll" (ByVal ghEnv&, phdbc&) As Integer
  66. Declare Function SQLAllocEnv Lib "odbc.dll" (phenv&) As Integer
  67. Declare Function SQLDisconnect Lib "odbc.dll" (ByVal hDbc&) As Integer
  68. Declare Function SQLError Lib "odbc.dll" (ByVal hEnv&, ByVal hDbc&, ByVal hstmt&, ByVal szSqlState$, pfNativeError&, ByVal szErrorMsg$, ByVal cbErrorMsgMax%, pcbErrorMsg%) As Integer
  69. Declare Function SQLConnect Lib "odbc.dll" (ByVal hDbc&, ByVal szDSN$, ByVal cbDSN%, ByVal szUID$, ByVal cbUID%, ByVal szAuthStr$, ByVal cbAuthStr%) As Integer
  70. Declare Function SQLAllocStmt Lib "odbc.dll" (ByVal hDbc&, phstmt&) As Integer
  71. Declare Function SQLFreeStmt Lib "odbc.dll" (ByVal hstmt&, ByVal fOption%) As Integer
  72. Declare Function SQLFreeConnect Lib "odbc.dll" (ByVal hDbc&) As Integer
  73. Declare Function SQLFreeEnv Lib "odbc.dll" (ByVal hEnv&) As Integer
  74. #End If
  75. '*********************************************************
  76. ' ODBC Module Extended Definitions
  77. '*********************************************************
  78.  
  79. ' ODBC Extended API Declarations
  80.  
  81. ' Level 1 Prototypes
  82.  
  83. #If Win32 Then
  84. Declare Function SQLDriverConnect Lib "odbc32.dll" (ByVal hDbc&, ByVal hWnd&, ByVal szCSIn$, ByVal cbCSIn%, ByVal szCSOut$, ByVal cbCSMax%, cbCSOut&, ByVal fDrvrComp%) As Integer
  85. Declare Function SQLGetFunctions Lib "odbc32.dll" (ByVal hDbc&, ByVal fFunction%, pfExists%) As Integer
  86. Declare Function SQLGetInfo Lib "odbc32.dll" (ByVal hDbc&, ByVal fInfoType%, rgbInfoValue As Any, ByVal cbInfoMax%, cbInfoOut&) As Integer
  87. Declare Function SQLGetConnectOption Lib "odbc32.dll" (ByVal hDbc&, ByVal fOption%, pvParam As Any) As Integer
  88. Declare Function SQLSetConnectOption Lib "odbc32.dll" (ByVal hDbc&, ByVal fOption%, ByVal vParam&) As Integer
  89. #Else
  90. Declare Function SQLDriverConnect Lib "odbc.dll" (ByVal hDbc&, ByVal hWnd%, ByVal szCSIn$, ByVal cbCSIn%, ByVal szCSOut$, ByVal cbCSMax%, cbCSOut%, ByVal fDrvrComp%) As Integer
  91. Declare Function SQLGetFunctions Lib "odbc.dll" (ByVal hDbc&, ByVal fFunction%, pfExists%) As Integer
  92. Declare Function SQLGetInfo Lib "odbc.dll" (ByVal hDbc&, ByVal fInfoType%, rgbInfoValue As Any, ByVal cbInfoMax%, cbInfoOut%) As Integer
  93. Declare Function SQLGetConnectOption Lib "odbc.dll" (ByVal hDbc&, ByVal fOption%, pvParam As Any) As Integer
  94. Declare Function SQLSetConnectOption Lib "odbc.dll" (ByVal hDbc&, ByVal fOption%, ByVal vParam&) As Integer
  95. #End If
  96.  
  97. ' Level 2 Prototypes
  98.  
  99. #If Win32 Then
  100. Declare Function SQLDataSources Lib "odbc32.dll" (ByVal hEnv&, ByVal fDirection%, ByVal szDSN$, ByVal cbDSNMax%, pcbDSN&, ByVal szDescription$, ByVal cbDescriptionMax%, pcbDescription&) As Integer
  101. Declare Function SQLDrivers Lib "odbc32.dll" (ByVal hEnv&, ByVal fDirection%, ByVal szDriverDesc$, ByVal cbDriverDescMax%, pcbDriverDesc&, ByVal szDriverAttr$, ByVal cbDrvrAttrMax%, pcbDrvrAttr&) As Integer
  102. #Else
  103. Declare Function SQLDataSources Lib "odbc.dll" (ByVal hEnv&, ByVal fDirection%, ByVal szDSN$, ByVal cbDSNMax%, pcbDSN%, ByVal szDescription$, ByVal cbDescriptionMax%, pcbDescription%) As Integer
  104. Declare Function SQLDrivers Lib "odbc.dll" (ByVal hEnv&, ByVal fDirection%, ByVal szDriverDesc$, ByVal cbDriverDescMax%, pcbDriverDesc%, ByVal szDriverAttr$, ByVal cbDrvrAttrMax%, pcbDrvrAttr%) As Integer
  105. #End If
  106.  
  107. '*********************************************************
  108. ' ODBC Public Core Declarations
  109. '*********************************************************
  110.  
  111. ' ODBC Constants/Types
  112.  
  113. Public Const SQL_NTS = -3                   '  NTS = Null Terminated String
  114. Public Const SQL_SQLSTATE_SIZE = 5          '  size of SQLSTATE
  115. Public Const SQL_MAX_MESSAGE_LENGTH = 512   '  message buffer size
  116. Public Const SQL_MAX_DSN_LENGTH = 32        '  maximum data source name size
  117.  
  118. '  RETCODEs
  119. '
  120. Public Const SQL_ERROR = -1
  121. Public Const SQL_INVALID_HANDLE = -2
  122. Public Const SQL_NO_DATA_FOUND = 100
  123. Public Const SQL_SUCCESS = 0
  124. Public Const SQL_SUCCESS_WITH_INFO = 1
  125.  
  126. '  SQLFreeStmt defines
  127. '
  128. Public Const SQL_CLOSE = 0
  129. Public Const SQL_DROP = 1
  130. Public Const SQL_UNBIND = 2
  131. Public Const SQL_RESET_PARAMS = 3
  132.  
  133. '  SQLSetParam defines
  134. '
  135. Public Const SQL_C_DEFAULT = 99
  136.  
  137. '  SQLTransact defines
  138. '
  139. Public Const SQL_COMMIT = 0
  140. Public Const SQL_ROLLBACK = 1
  141.  
  142. '  Standard SQL datatypes, using ANSI type numbering
  143. '
  144. Public Const SQL_CHAR = 1
  145. Public Const SQL_NUMERIC = 2
  146. Public Const SQL_DECIMAL = 3
  147. Public Const SQL_INTEGER = 4
  148. Public Const SQL_SMALLINT = 5
  149. Public Const SQL_FLOAT = 6
  150. Public Const SQL_REAL = 7
  151. Public Const SQL_DOUBLE = 8
  152. Public Const SQL_VARCHAR = 12
  153.  
  154. Public Const SQL_TYPE_MIN = 1
  155. Public Const SQL_TYPE_NULL = 0
  156. Public Const SQL_TYPE_MAX = 12
  157.  
  158. '  C datatype to SQL datatype mapping    SQL types
  159. '
  160. Public Const SQL_C_CHAR = SQL_CHAR          '  CHAR, VARCHAR, DECIMAL, NUMERIC
  161. Public Const SQL_C_LONG = SQL_INTEGER       '  INTEGER
  162. Public Const SQL_C_SHORT = SQL_SMALLINT     '  SMALLINT
  163. Public Const SQL_C_FLOAT = SQL_REAL         '  REAL
  164. Public Const SQL_C_DOUBLE = SQL_DOUBLE      '  FLOAT, DOUBLE
  165.  
  166. '  NULL status constants.  These are used in SQLColumns, SQLColAttributes,
  167. '  SQLDescribeCol, and SQLSpecialColumns to describe the nullablity of a
  168. '  column in a table.  SQL_NULLABLE_UNKNOWN can be returned only by
  169. '  SQLDescribeCol or SQLColAttributes.  It is used when the DBMS's meta-data
  170. '  does not contain this info.
  171. '
  172. Public Const SQL_NO_NULLS = 0
  173. Public Const SQL_NULLABLE = 1
  174. Public Const SQL_NULLABLE_UNKNOWN = 2
  175.  
  176. '  Special length values
  177. '
  178. Public Const SQL_NULL_DATA = -1
  179. Public Const SQL_DATA_AT_EXEC = -2
  180.  
  181. '  SQLColAttributes defines
  182. '
  183. Public Const SQL_COLUMN_COUNT = 0
  184. Public Const SQL_COLUMN_NAME = 1
  185. Public Const SQL_COLUMN_TYPE = 2
  186. Public Const SQL_COLUMN_LENGTH = 3
  187. Public Const SQL_COLUMN_PRECISION = 4
  188. Public Const SQL_COLUMN_SCALE = 5
  189. Public Const SQL_COLUMN_DISPLAY_SIZE = 6
  190. Public Const SQL_COLUMN_NULLABLE = 7
  191. Public Const SQL_COLUMN_UNSIGNED = 8
  192. Public Const SQL_COLUMN_MONEY = 9
  193. Public Const SQL_COLUMN_UPDATABLE = 10
  194. Public Const SQL_COLUMN_AUTO_INCREMENT = 11
  195. Public Const SQL_COLUMN_CASE_SENSITIVE = 12
  196. Public Const SQL_COLUMN_SEARCHABLE = 13
  197. Public Const SQL_COLUMN_TYPE_NAME = 14
  198. #If ODBCVER >= &H200 Then
  199. Public Const SQL_COLUMN_TABLE_NAME = 15
  200. Public Const SQL_COLUMN_OWNER_NAME = 16
  201. Public Const SQL_COLUMN_QUALIFIER_NAME = 17
  202. Public Const SQL_COLUMN_LABEL = 18
  203. #Else
  204. Public Const SQL_COLATT_OPT_MAX = SQL_COLUMN_LABEL
  205. #End If 'ODBCVER >= &H200
  206.  
  207. '  SQLColAttributes subdefines for SQL_COLUMN_UPDATABLE
  208. '
  209. Public Const SQL_ATTR_READONLY = 0
  210. Public Const SQL_ATTR_WRITE = 1
  211. Public Const SQL_ATTR_READWRITE_UNKNOWN = 2
  212.  
  213. '  SQLColAttributes subdefines for SQL_COLUMN_SEARCHABLE
  214. '  These are also used by SQLGetInfo
  215. '
  216. Public Const SQL_UNSEARCHABLE = 0
  217. Public Const SQL_LIKE_ONLY = 1
  218. Public Const SQL_ALL_EXCEPT_LIKE = 2
  219. Public Const SQL_SEARCHABLE = 3
  220.  
  221. '  SQLError defines
  222. '
  223. Public Const SQL_NULL_HENV = 0
  224. Public Const SQL_NULL_HDBC = 0
  225. Public Const SQL_NULL_HSTMT = 0
  226.  
  227. '
  228. '|========================================================================|
  229. '| ODBC Public Extended Definitions                                       |
  230. '|========================================================================|
  231.  
  232. ' Level 1 Definitions/Functions
  233. '
  234. Public Const SQL_MAX_OPTION_STRING_LENGTH = 256
  235.  
  236. ' Additional return codes
  237. '
  238. Public Const SQL_STILL_EXECUTING = 2
  239. Public Const SQL_NEED_DATA = 99
  240.  
  241. ' SQL extended datatypes
  242. '
  243. Public Const SQL_DATE = 9
  244. Public Const SQL_TIME = 10
  245. Public Const SQL_TIMESTAMP = 11
  246. Public Const SQL_LONGVARCHAR = -1
  247. Public Const SQL_BINARY = -2
  248. Public Const SQL_VARBINARY = -3
  249. Public Const SQL_LONGVARBINARY = -4
  250. Public Const SQL_BIGINT = -5
  251. Public Const SQL_TINYINT = -6
  252. Public Const SQL_BIT = -7
  253. Public Const SQL_TYPE_DRIVER_START = -80
  254.  
  255. ' C datatype to SQL datatype mapping
  256. '
  257. #If ODBCVER >= &H200 Then
  258. Public Const SQL_SIGNED_OFFSET = -20
  259. Public Const SQL_UNSIGNED_OFFSET = -22
  260. #End If 'ODBCVER >= &H200
  261.  
  262. Public Const SQL_C_DATE = SQL_DATE
  263. Public Const SQL_C_TIME = SQL_TIME
  264. Public Const SQL_C_TIMESTAMP = SQL_TIMESTAMP
  265. Public Const SQL_C_BINARY = SQL_BINARY
  266. Public Const SQL_C_BIT = SQL_BIT
  267. Public Const SQL_C_TINYINT = SQL_TINYINT
  268. #If ODBCVER >= &H200 Then
  269. Public Const SQL_C_SLONG = SQL_C_LONG + SQL_SIGNED_OFFSET
  270. Public Const SQL_C_SSHORT = SQL_C_SHORT + SQL_SIGNED_OFFSET
  271. Public Const SQL_C_STINYINT = SQL_TINYINT + SQL_SIGNED_OFFSET
  272. Public Const SQL_C_ULONG = SQL_C_LONG + SQL_UNSIGNED_OFFSET
  273. Public Const SQL_C_USHORT = SQL_C_SHORT + SQL_UNSIGNED_OFFSET
  274. Public Const SQL_C_UTINYINT = SQL_TINYINT + SQL_UNSIGNED_OFFSET
  275. Public Const SQL_C_BOOKMARK = SQL_C_ULONG
  276. #End If 'ODBCVER >= &H200
  277.  
  278.  
  279. Public Const SQL_ALL_TYPES = 0
  280. '
  281. '  Date/Time/Timestamp Structs
  282. '
  283. Type DATE_STRUCT
  284.   year      As Integer
  285.   month     As Integer
  286.   day       As Integer
  287. End Type
  288.  
  289. Type TIME_STRUCT
  290.   hour      As Integer
  291.   minute    As Integer
  292.   second    As Integer
  293. End Type
  294.  
  295. Type TIMESTAMP_STRUCT
  296.   year      As Integer
  297.   month     As Integer
  298.   day       As Integer
  299.   hour      As Integer
  300.   minute    As Integer
  301.   second    As Integer
  302.   fraction  As Long
  303. End Type
  304.  
  305. ' Options for SQLDriverConnect
  306. '
  307. Public Const SQL_DRIVER_NOPROMPT = 0
  308. Public Const SQL_DRIVER_COMPLETE = 1
  309. Public Const SQL_DRIVER_PROMPT = 2
  310. Public Const SQL_DRIVER_COMPLETE_REQUIRED = 3
  311.  
  312. ' Special return values for SQLGetData
  313. '
  314. Public Const SQL_NO_TOTAL = -4
  315.  
  316. ' SQLSetParam extensions
  317. #If ODBCVER >= &H200 Then
  318. Public Const SQL_DEFAULT_PARAM = -5
  319. Public Const SQL_IGNORE = -6
  320. Public Const SQL_LEN_DATA_AT_EXEC_OFFSET = -100
  321. #End If 'ODBCVER >= &H200
  322.  
  323. ' Defines for SQLGetFunctions
  324. ' Core Functions
  325. '
  326. Public Const SQL_API_SQLALLOCCONNECT = 1
  327. Public Const SQL_API_SQLALLOCENV = 2
  328. Public Const SQL_API_SQLALLOCSTMT = 3
  329. Public Const SQL_API_SQLBINDCOL = 4
  330. Public Const SQL_API_SQLCANCEL = 5
  331. Public Const SQL_API_SQLCOLATTRIBUTES = 6
  332. Public Const SQL_API_SQLCONNECT = 7
  333. Public Const SQL_API_SQLDESCRIBECOL = 8
  334. Public Const SQL_API_SQLDISCONNECT = 9
  335. Public Const SQL_API_SQLERROR = 10
  336. Public Const SQL_API_SQLEXECDIRECT = 11
  337. Public Const SQL_API_SQLEXECUTE = 12
  338. Public Const SQL_API_SQLFETCH = 13
  339. Public Const SQL_API_SQLFREECONNECT = 14
  340. Public Const SQL_API_SQLFREEENV = 15
  341. Public Const SQL_API_SQLFREESTMT = 16
  342. Public Const SQL_API_SQLGETCURSORNAME = 17
  343. Public Const SQL_API_SQLNUMRESULTCOLS = 18
  344. Public Const SQL_API_SQLPREPARE = 19
  345. Public Const SQL_API_SQLROWCOUNT = 20
  346. Public Const SQL_API_SQLSETCURSORNAME = 21
  347. Public Const SQL_API_SQLSETPARAM = 22
  348. Public Const SQL_API_SQLTRANSACT = 23
  349.  
  350. Public Const SQL_NUM_FUNCTIONS = 23
  351.  
  352. Public Const SQL_EXT_API_START = 40
  353. ' Level 1 Functions
  354. '
  355. Public Const SQL_API_SQLCOLUMNS = 40
  356. Public Const SQL_API_SQLDRIVERCONNECT = 41
  357. Public Const SQL_API_SQLGETCONNECTOPTION = 42
  358. Public Const SQL_API_SQLGETDATA = 43
  359. Public Const SQL_API_SQLGETFUNCTIONS = 44
  360. Public Const SQL_API_SQLGETINFO = 45
  361. Public Const SQL_API_SQLGETSTMTOPTION = 46
  362. Public Const SQL_API_SQLGETTYPEINFO = 47
  363. Public Const SQL_API_SQLPARAMDATA = 48
  364. Public Const SQL_API_SQLPUTDATA = 49
  365. Public Const SQL_API_SQLSETCONNECTOPTION = 50
  366. Public Const SQL_API_SQLSETSTMTOPTION = 51
  367. Public Const SQL_API_SQLSPECIALCOLUMNS = 52
  368. Public Const SQL_API_SQLSTATISTICS = 53
  369. Public Const SQL_API_SQLTABLES = 54
  370.  
  371. ' Level 2 Functions
  372. '
  373. Public Const SQL_API_SQLBROWSECONNECT = 55
  374. Public Const SQL_API_SQLCOLUMNPRIVILEGES = 56
  375. Public Const SQL_API_SQLDATASOURCES = 57
  376. Public Const SQL_API_SQLDESCRIBEPARAM = 58
  377. Public Const SQL_API_SQLEXTENDEDFETCH = 59
  378. Public Const SQL_API_SQLFOREIGNKEYS = 60
  379. Public Const SQL_API_SQLMORERESULTS = 61
  380. Public Const SQL_API_SQLNATIVESQL = 62
  381. Public Const SQL_API_SQLNUMPARAMS = 63
  382. Public Const SQL_API_SQLPARAMOPTIONS = 64
  383. Public Const SQL_API_SQLPRIMARYKEYS = 65
  384. Public Const SQL_API_SQLPROCEDURECOLUMNS = 66
  385. Public Const SQL_API_SQLPROCEDURES = 67
  386. Public Const SQL_API_SQLSETPOS = 68
  387. Public Const SQL_API_SQLSETSCROLLOPTIONS = 69
  388. Public Const SQL_API_SQLTABLEPRIVILEGES = 70
  389. #If ODBCVER >= &H200 Then
  390. Public Const SQL_API_SQLDRIVERS = 71
  391. Public Const SQL_API_SQLBINDPARAMETER = 72
  392. Public Const SQL_EXT_API_LAST = 72
  393. #Else
  394. Public Const SQL_EXT_API_LAST = SQL_API_SQLTABLEPRIVILEGES
  395. #End If 'ODBCVER >= &H200
  396.  
  397. Public Const SQL_API_ALL_FUNCTIONS = 0
  398.  
  399. Public Const SQL_NUM_EXTENSIONS = (SQL_EXT_API_LAST - SQL_EXT_API_START + 1)
  400. #If ODBCVER >= &H200 Then
  401. Public Const SQL_API_LOADBYORDINAL = 199
  402. #End If 'ODBCVER >= &H200
  403.  
  404. ' Defines for SQLGetInfo
  405. '
  406. Public Const SQL_INFO_FIRST = 0
  407. Public Const SQL_ACTIVE_CONNECTIONS = 0
  408. Public Const SQL_ACTIVE_STATEMENTS = 1
  409. Public Const SQL_DATA_SOURCE_NAME = 2
  410. Public Const SQL_DRIVER_HDBC = 3
  411. Public Const SQL_DRIVER_HENV = 4
  412. Public Const SQL_DRIVER_HSTMT = 5
  413. Public Const SQL_DRIVER_NAME = 6
  414. Public Const SQL_DRIVER_VER = 7
  415. Public Const SQL_FETCH_DIRECTION = 8
  416. Public Const SQL_ODBC_API_CONFORMANCE = 9
  417. Public Const SQL_ODBC_VER = 10
  418. Public Const SQL_ROW_UPDATES = 11
  419. Public Const SQL_ODBC_SAG_CLI_CONFORMANCE = 12
  420. Public Const SQL_SERVER_NAME = 13
  421. Public Const SQL_SEARCH_PATTERN_ESCAPE = 14
  422. Public Const SQL_ODBC_SQL_CONFORMANCE = 15
  423.  
  424. Public Const SQL_DBMS_NAME = 17
  425. Public Const SQL_DBMS_VER = 18
  426.  
  427. Public Const SQL_ACCESSIBLE_TABLES = 19
  428. Public Const SQL_ACCESSIBLE_PROCEDURES = 20
  429. Public Const SQL_PROCEDURES = 21
  430. Public Const SQL_CONCAT_NULL_BEHAVIOR = 22
  431. Public Const SQL_CURSOR_COMMIT_BEHAVIOR = 23
  432. Public Const SQL_CURSOR_ROLLBACK_BEHAVIOR = 24
  433. Public Const SQL_DATA_SOURCE_READ_ONLY = 25
  434. Public Const SQL_DEFAULT_TXN_ISOLATION = 26
  435. Public Const SQL_EXPRESSIONS_IN_ORDERBY = 27
  436. Public Const SQL_IDENTIFIER_CASE = 28
  437. Public Const SQL_IDENTIFIER_QUOTE_CHAR = 29
  438. Public Const SQL_MAX_COLUMN_NAME_LEN = 30
  439. Public Const SQL_MAX_CURSOR_NAME_LEN = 31
  440. Public Const SQL_MAX_OWNER_NAME_LEN = 32
  441. Public Const SQL_MAX_PROCEDURE_NAME_LEN = 33
  442. Public Const SQL_MAX_QUALIFIER_NAME_LEN = 34
  443. Public Const SQL_MAX_TABLE_NAME_LEN = 35
  444. Public Const SQL_MULT_RESULT_SETS = 36
  445. Public Const SQL_MULTIPLE_ACTIVE_TXN = 37
  446. Public Const SQL_OUTER_JOINS = 38
  447. Public Const SQL_OWNER_TERM = 39
  448. Public Const SQL_PROCEDURE_TERM = 40
  449. Public Const SQL_QUALIFIER_NAME_SEPARATOR = 41
  450. Public Const SQL_QUALIFIER_TERM = 42
  451. Public Const SQL_SCROLL_CONCURRENCY = 43
  452. Public Const SQL_SCROLL_OPTIONS = 44
  453. Public Const SQL_TABLE_TERM = 45
  454. Public Const SQL_TXN_CAPABLE = 46
  455. Public Const SQL_USER_NAME = 47
  456.  
  457. Public Const SQL_CONVERT_FUNCTIONS = 48
  458. Public Const SQL_NUMERIC_FUNCTIONS = 49
  459. Public Const SQL_STRING_FUNCTIONS = 50
  460. Public Const SQL_SYSTEM_FUNCTIONS = 51
  461. Public Const SQL_TIMEDATE_FUNCTIONS = 52
  462.  
  463. Public Const SQL_CONVERT_BIGINT = 53
  464. Public Const SQL_CONVERT_BINARY = 54
  465. Public Const SQL_CONVERT_BIT = 55
  466. Public Const SQL_CONVERT_CHAR = 56
  467. Public Const SQL_CONVERT_DATE = 57
  468. Public Const SQL_CONVERT_DECIMAL = 58
  469. Public Const SQL_CONVERT_DOUBLE = 59
  470. Public Const SQL_CONVERT_FLOAT = 60
  471. Public Const SQL_CONVERT_INTEGER = 61
  472. Public Const SQL_CONVERT_LONGVARCHAR = 62
  473. Public Const SQL_CONVERT_NUMERIC = 63
  474. Public Const SQL_CONVERT_REAL = 64
  475. Public Const SQL_CONVERT_SMALLINT = 65
  476. Public Const SQL_CONVERT_TIME = 66
  477. Public Const SQL_CONVERT_TIMESTAMP = 67
  478. Public Const SQL_CONVERT_TINYINT = 68
  479. Public Const SQL_CONVERT_VARBINARY = 69
  480. Public Const SQL_CONVERT_VARCHAR = 70
  481. Public Const SQL_CONVERT_LONGVARBINARY = 71
  482.  
  483. Public Const SQL_TXN_ISOLATION_OPTION = 72
  484. Public Const SQL_ODBC_SQL_OPT_IEF = 73
  485. Public Const SQL_CORRELATION_NAME = 74
  486. Public Const SQL_NON_NULLABLE_COLUMNS = 75
  487. #If ODBCVER >= &H200 Then
  488. Public Const SQL_DRIVER_HLIB = 76
  489. Public Const SQL_DRIVER_ODBC_VER = 77
  490. Public Const SQL_LOCK_TYPES = 78
  491. Public Const SQL_POS_OPERATIONS = 79
  492. Public Const SQL_POSITIONED_STATEMENTS = 80
  493. Public Const SQL_GETDATA_EXTENSIONS = 81
  494. Public Const SQL_BOOKMARK_PERSISTENCE = 82
  495. Public Const SQL_STATIC_SENSITIVITY = 83
  496. Public Const SQL_FILE_USAGE = 84
  497. Public Const SQL_NULL_COLLATION = 85
  498. Public Const SQL_ALTER_TABLE = 86
  499. Public Const SQL_COLUMN_ALIAS = 87
  500. Public Const SQL_GROUP_BY = 88
  501. Public Const SQL_KEYWORDS = 89
  502. Public Const SQL_ORDER_BY_COLUMNS_IN_SELECT = 90
  503. Public Const SQL_OWNER_USAGE = 91
  504. Public Const SQL_QUALIFIER_USAGE = 92
  505. Public Const SQL_QUOTED_IDENTIFIER_CASE = 93
  506. Public Const SQL_SPECIAL_CHARACTERS = 94
  507. Public Const SQL_SUBQUERIES = 95
  508. Public Const SQL_UNION = 96
  509. Public Const SQL_MAX_COLUMNS_IN_GROUP_BY = 97
  510. Public Const SQL_MAX_COLUMNS_IN_INDEX = 98
  511. Public Const SQL_MAX_COLUMNS_IN_ORDER_BY = 99
  512. Public Const SQL_MAX_COLUMNS_IN_SELECT = 100
  513. Public Const SQL_MAX_COLUMNS_IN_TABLE = 101
  514. Public Const SQL_MAX_INDEX_SIZE = 102
  515. Public Const SQL_MAX_ROW_SIZE_INCLUDES_LONG = 103
  516. Public Const SQL_MAX_ROW_SIZE = 104
  517. Public Const SQL_MAX_STATEMENT_LEN = 105
  518. Public Const SQL_MAX_TABLES_IN_SELECT = 106
  519. Public Const SQL_MAX_USER_NAME_LEN = 107
  520. Public Const SQL_MAX_CHAR_LITERAL_LEN = 108
  521. Public Const SQL_TIMEDATE_ADD_INTERVALS = 109
  522. Public Const SQL_TIMEDATE_DIFF_INTERVALS = 110
  523. Public Const SQL_NEED_LONG_DATA_LEN = 111
  524. Public Const SQL_MAX_BINARY_LITERAL_LEN = 112
  525. Public Const SQL_LIKE_ESCAPE_CLAUSE = 113
  526. Public Const SQL_QUALIFIER_LOCATION = 114
  527.  
  528. #If ODBCVER >= &H210 Then
  529. Public Const SQL_OJ_CAPABILITIES = 65003                       'Temp value until ODBC 3.0
  530. #End If 'ODBCVER >= &H210
  531.  
  532. Public Const SQL_INFO_LAST = SQL_QUALIFIER_LOCATION
  533. #Else
  534. Public Const SQL_INFO_LAST = SQL_NON_NULLABLE_COLUMNS
  535. #End If 'ODBCVER >= &H200
  536.  
  537. Public Const SQL_INFO_DRIVER_START = 1000
  538.  
  539. ' "SQL_CONVERT_" return value bitmasks
  540. '
  541. Public Const SQL_CVT_CHAR = &H1&
  542. Public Const SQL_CVT_NUMERIC = &H2&
  543. Public Const SQL_CVT_DECIMAL = &H4&
  544. Public Const SQL_CVT_INTEGER = &H8&
  545. Public Const SQL_CVT_SMALLINT = &H10&
  546. Public Const SQL_CVT_FLOAT = &H20&
  547. Public Const SQL_CVT_REAL = &H40&
  548. Public Const SQL_CVT_DOUBLE = &H80&
  549. Public Const SQL_CVT_VARCHAR = &H100&
  550. Public Const SQL_CVT_LONGVARCHAR = &H200&
  551. Public Const SQL_CVT_BINARY = &H400&
  552. Public Const SQL_CVT_VARBINARY = &H800&
  553. Public Const SQL_CVT_BIT = &H1000&
  554. Public Const SQL_CVT_TINYINT = &H2000&
  555. Public Const SQL_CVT_BIGINT = &H4000&
  556. Public Const SQL_CVT_DATE = &H8000&
  557. Public Const SQL_CVT_TIME = &H10000
  558. Public Const SQL_CVT_TIMESTAMP = &H20000
  559. Public Const SQL_CVT_LONGVARBINARY = &H40000
  560.  
  561. ' Conversion functions
  562. '
  563. Public Const SQL_FN_CVT_CONVERT = &H1&
  564.  
  565. ' String functions
  566. '
  567. Public Const SQL_FN_STR_CONCAT = &H1&
  568. Public Const SQL_FN_STR_INSERT = &H2&
  569. Public Const SQL_FN_STR_LEFT = &H4&
  570. Public Const SQL_FN_STR_LTRIM = &H8&
  571. Public Const SQL_FN_STR_LENGTH = &H10&
  572. Public Const SQL_FN_STR_LOCATE = &H20&
  573. Public Const SQL_FN_STR_LCASE = &H40&
  574. Public Const SQL_FN_STR_REPEAT = &H80&
  575. Public Const SQL_FN_STR_REPLACE = &H100&
  576. Public Const SQL_FN_STR_RIGHT = &H200&
  577. Public Const SQL_FN_STR_RTRIM = &H400&
  578. Public Const SQL_FN_STR_SUBSTRING = &H800&
  579. Public Const SQL_FN_STR_UCASE = &H1000&
  580. Public Const SQL_FN_STR_ASCII = &H2000&
  581. Public Const SQL_FN_STR_CHAR = &H4000&
  582. #If ODBCVER >= &H200 Then
  583. Public Const SQL_FN_STR_DIFFERENCE = &H8000&
  584. Public Const SQL_FN_STR_LOCATE_2 = &H10000
  585. Public Const SQL_FN_STR_SOUNDEX = &H20000
  586. Public Const SQL_FN_STR_SPACE = &H40000
  587. #End If 'ODBCVER >= &H200
  588.  
  589. ' Numeric functions
  590. '
  591. Public Const SQL_FN_NUM_ABS = &H1&
  592. Public Const SQL_FN_NUM_ACOS = &H2&
  593. Public Const SQL_FN_NUM_ASIN = &H4&
  594. Public Const SQL_FN_NUM_ATAN = &H8&
  595. Public Const SQL_FN_NUM_ATAN2 = &H10&
  596. Public Const SQL_FN_NUM_CEILING = &H20&
  597. Public Const SQL_FN_NUM_COS = &H40&
  598. Public Const SQL_FN_NUM_COT = &H80&
  599. Public Const SQL_FN_NUM_EXP = &H100&
  600. Public Const SQL_FN_NUM_FLOOR = &H200&
  601. Public Const SQL_FN_NUM_LOG = &H400&
  602. Public Const SQL_FN_NUM_MOD = &H800&
  603. Public Const SQL_FN_NUM_SIGN = &H1000&
  604. Public Const SQL_FN_NUM_SIN = &H2000&
  605. Public Const SQL_FN_NUM_SQRT = &H4000&
  606. Public Const SQL_FN_NUM_TAN = &H8000&
  607. Public Const SQL_FN_NUM_PI = &H10000
  608. Public Const SQL_FN_NUM_RAND = &H20000
  609. #If ODBCVER >= &H200 Then
  610. Public Const SQL_FN_NUM_DEGREES = &H40000
  611. Public Const SQL_FN_NUM_LOG10 = &H80000
  612. Public Const SQL_FN_NUM_POWER = &H100000
  613. Public Const SQL_FN_NUM_RADIANS = &H200000
  614. Public Const SQL_FN_NUM_ROUND = &H400000
  615. Public Const SQL_FN_NUM_TRUNCATE = &H800000
  616. #End If 'ODBCVER >= &H200
  617.  
  618. ' Time/date functions
  619. '
  620. Public Const SQL_FN_TD_NOW = &H1&
  621. Public Const SQL_FN_TD_CURDATE = &H2&
  622. Public Const SQL_FN_TD_DAYOFMONTH = &H4&
  623. Public Const SQL_FN_TD_DAYOFWEEK = &H8&
  624. Public Const SQL_FN_TD_DAYOFYEAR = &H10&
  625. Public Const SQL_FN_TD_MONTH = &H20&
  626. Public Const SQL_FN_TD_QUARTER = &H40&
  627. Public Const SQL_FN_TD_WEEK = &H80&
  628. Public Const SQL_FN_TD_YEAR = &H100&
  629. Public Const SQL_FN_TD_CURTIME = &H200&
  630. Public Const SQL_FN_TD_HOUR = &H400&
  631. Public Const SQL_FN_TD_MINUTE = &H800&
  632. Public Const SQL_FN_TD_SECOND = &H1000&
  633. #If ODBCVER >= &H200 Then
  634. Public Const SQL_FN_TD_TIMESTAMPADD = &H2000&
  635. Public Const SQL_FN_TD_TIMESTAMPDIFF = &H4000&
  636. Public Const SQL_FN_TD_DAYNAME = &H8000&
  637. Public Const SQL_FN_TD_MONTHNAME = &H10000
  638. #End If 'ODBCVER >= &H200
  639.  
  640. ' System functions
  641. '
  642. Public Const SQL_FN_SYS_USERNAME = &H1&
  643. Public Const SQL_FN_SYS_DBNAME = &H2&
  644. Public Const SQL_FN_SYS_IFNULL = &H4&
  645.  
  646. ' Timedate intervals
  647. '
  648. #If ODBCVER >= &H200 Then
  649. Public Const SQL_FN_TSI_FRAC_SECOND = &H1&
  650. Public Const SQL_FN_TSI_SECOND = &H2&
  651. Public Const SQL_FN_TSI_MINUTE = &H4&
  652. Public Const SQL_FN_TSI_HOUR = &H8&
  653. Public Const SQL_FN_TSI_DAY = &H10&
  654. Public Const SQL_FN_TSI_WEEK = &H20&
  655. Public Const SQL_FN_TSI_MONTH = &H40&
  656. Public Const SQL_FN_TSI_QUARTER = &H80&
  657. Public Const SQL_FN_TSI_YEAR = &H100&
  658. #End If 'ODBCVER >= &H200
  659.  
  660. ' ODBC API conformance
  661. '
  662. Public Const SQL_OAC_NONE = 0
  663. Public Const SQL_OAC_LEVEL1 = 1
  664. Public Const SQL_OAC_LEVEL2 = 2
  665.  
  666. ' SAG CLI conformance
  667. '
  668. Public Const SQL_OSCC_NOT_COMPLIANT = 0
  669. Public Const SQL_OSCC_COMPLIANT = 1
  670.  
  671. ' ODBC SQL conformance
  672. '
  673. Public Const SQL_OSC_MINIMUM = 0
  674. Public Const SQL_OSC_CORE = 1
  675. Public Const SQL_OSC_EXTENDED = 2
  676.  
  677. ' Concatenation behavior
  678. '
  679. Public Const SQL_CB_NULL = 0
  680. Public Const SQL_CB_NON_NULL = 1
  681.  
  682. ' Cursor commit behavior
  683. '
  684. Public Const SQL_CB_DELETE = 0
  685. Public Const SQL_CB_CLOSE = 1
  686. Public Const SQL_CB_PRESERVE = 2
  687.  
  688. ' Identifier case
  689. '
  690. Public Const SQL_IC_UPPER = 1
  691. Public Const SQL_IC_LOWER = 2
  692. Public Const SQL_IC_SENSITIVE = 3
  693. Public Const SQL_IC_MIXED = 4
  694.  
  695. ' Transaction capable
  696. '
  697. Public Const SQL_TC_NONE = 0
  698. Public Const SQL_TC_DML = 1
  699. Public Const SQL_TC_ALL = 2
  700. #If ODBCVER >= &H200 Then
  701. Public Const SQL_TC_DDL_COMMIT = 3
  702. Public Const SQL_TC_DDL_IGNORE = 4
  703. #End If 'ODBCVER >= &H200
  704.  
  705. ' Scroll option masks
  706. '
  707. Public Const SQL_SO_FORWARD_ONLY = &H1&
  708. Public Const SQL_SO_KEYSET_DRIVEN = &H2&
  709. Public Const SQL_SO_DYNAMIC = &H4&
  710. Public Const SQL_SO_MIXED = &H8&
  711. #If ODBCVER >= &H200 Then
  712. Public Const SQL_SO_STATIC = &H10&
  713. #End If 'ODBCVER >= &H200
  714.  
  715. ' Scroll concurrency option masks
  716. '
  717. Public Const SQL_SCCO_READ_ONLY = &H1&
  718. Public Const SQL_SCCO_LOCK = &H2&
  719. Public Const SQL_SCCO_OPT_ROWVER = &H4&
  720. Public Const SQL_SCCO_OPT_VALUES = &H8&
  721.  
  722. ' Fetch direction option masks
  723. '
  724. Public Const SQL_FD_FETCH_NEXT = &H1&
  725. Public Const SQL_FD_FETCH_FIRST = &H2&
  726. Public Const SQL_FD_FETCH_LAST = &H4&
  727. Public Const SQL_FD_FETCH_PRIOR = &H8&
  728. Public Const SQL_FD_FETCH_ABSOLUTE = &H10&
  729. Public Const SQL_FD_FETCH_RELATIVE = &H20&
  730. Public Const SQL_FD_FETCH_RESUME = &H40&
  731. #If ODBCVER >= &H200 Then
  732. Public Const SQL_FD_FETCH_BOOKMARK = &H80&
  733. #End If 'ODBCVER >= &H200
  734.  
  735. ' Transaction isolation option masks
  736. '
  737. Public Const SQL_TXN_READ_UNCOMMITTED = &H1&
  738. Public Const SQL_TXN_READ_COMMITTED = &H2&
  739. Public Const SQL_TXN_REPEATABLE_READ = &H4&
  740. Public Const SQL_TXN_SERIALIZABLE = &H8&
  741. Public Const SQL_TXN_VERSIONING = &H10&
  742.  
  743. ' Correlation name
  744. '
  745. Public Const SQL_CN_NONE = 0
  746. Public Const SQL_CN_DIFFERENT = 1
  747. Public Const SQL_CN_ANY = 2
  748.  
  749. ' Non-nullable columns
  750. '
  751. Public Const SQL_NNC_NULL = 0
  752. Public Const SQL_NNC_NON_NULL = 1
  753.  
  754. ' Null collation
  755. '
  756. #If ODBCVER >= &H200 Then
  757. Public Const SQL_NC_HIGH = 0
  758. Public Const SQL_NC_LOW = 1
  759. Public Const SQL_NC_START = 2
  760. Public Const SQL_NC_END = 4
  761.  
  762. ' File usage
  763. '
  764. Public Const SQL_FILE_NOT_SUPPORTED = 0
  765. Public Const SQL_FILE_TABLE = 1
  766. Public Const SQL_FILE_QUALIFIER = 2
  767.  
  768. ' SQLGetData extensions masks
  769. '
  770. Public Const SQL_GD_ANY_COLUMN = &H1&
  771. Public Const SQL_GD_ANY_ORDER = &H2&
  772. Public Const SQL_GD_BLOCK = &H4&
  773. Public Const SQL_GD_BOUND = &H8&
  774.  
  775. ' Alter table
  776. '
  777. Public Const SQL_AT_ADD_COLUMN = 1
  778. Public Const SQL_AT_DROP_COLUMN = 2
  779.  
  780. ' Positioned statements masks
  781. '
  782. Public Const SQL_PS_POSITIONED_DELETE = &H1&
  783. Public Const SQL_PS_POSITIONED_UPDATE = &H2&
  784. Public Const SQL_PS_SELECT_FOR_UPDATE = &H4&
  785.  
  786. ' Group By
  787. '
  788. Public Const SQL_GB_NOT_SUPPORTED = 0
  789. Public Const SQL_GB_GROUP_BY_EQUALS_SELECT = 1
  790. Public Const SQL_GB_GROUP_BY_CONTAINS_SELECT = 2
  791. Public Const SQL_GB_NO_RELATION = 3
  792.  
  793. ' Owner usage masks
  794. '
  795. Public Const SQL_OU_DML_STATEMENTS = &H1&
  796. Public Const SQL_OU_PROCEDURE_INVOCATION = &H2&
  797. Public Const SQL_OU_TABLE_DEFINITION = &H4&
  798. Public Const SQL_OU_INDEX_DEFINITION = &H8&
  799. Public Const SQL_OU_PRIVILEGE_DEFINITION = &H10&
  800.  
  801. ' Qualifier usage masks
  802. '
  803. Public Const SQL_QU_DML_STATEMENTS = &H1&
  804. Public Const SQL_QU_PROCEDURE_INVOCATION = &H2&
  805. Public Const SQL_QU_TABLE_DEFINITION = &H4&
  806. Public Const SQL_QU_INDEX_DEFINITION = &H8&
  807. Public Const SQL_QU_PRIVILEGE_DEFINITION = &H10&
  808.  
  809. ' Subqueries masks
  810. '
  811. Public Const SQL_SQ_COMPARISON = &H1&
  812. Public Const SQL_SQ_EXISTS = &H2&
  813. Public Const SQL_SQ_IN = &H4&
  814. Public Const SQL_SQ_QUANTIFIED = &H8&
  815. Public Const SQL_SQ_CORRELATED_SUBQUERIES = &H10&
  816.  
  817. ' Union masks
  818. '
  819. Public Const SQL_U_UNION = &H1&
  820. Public Const SQL_U_UNION_ALL = &H2&
  821.  
  822. ' Bookmark persistence
  823. '
  824. Public Const SQL_BP_CLOSE = &H1&
  825. Public Const SQL_BP_DELETE = &H2&
  826. Public Const SQL_BP_DROP = &H4&
  827. Public Const SQL_BP_TRANSACTION = &H8&
  828. Public Const SQL_BP_UPDATE = &H10&
  829. Public Const SQL_BP_OTHER_HSTMT = &H20&
  830. Public Const SQL_BP_SCROLL = &H40&
  831.  
  832. ' Static sensitivity
  833. '
  834. Public Const SQL_SS_ADDITIONS = &H1&
  835. Public Const SQL_SS_DELETIONS = &H2&
  836. Public Const SQL_SS_UPDATES = &H4&
  837.  
  838. ' Lock types masks
  839. '
  840. Public Const SQL_LCK_NO_CHANGE = &H1&
  841. Public Const SQL_LCK_EXCLUSIVE = &H2&
  842. Public Const SQL_LCK_UNLOCK = &H4&
  843.  
  844. ' Positioned operations masks
  845. '
  846. Public Const SQL_POS_POSITION = &H1&
  847. Public Const SQL_POS_REFRESH = &H2&
  848. Public Const SQL_POS_UPDATE = &H4&
  849. Public Const SQL_POS_DELETE = &H8&
  850. Public Const SQL_POS_ADD = &H10&
  851.  
  852. ' Qualifier location
  853. '
  854. Public Const SQL_QL_START = 1
  855. Public Const SQL_QL_END = 2
  856.  
  857. ' Options for SQL_OJ_CAPABILITIES in SQLGetInfo
  858.  
  859. #If ODBCVER >= &H201 Then
  860. Public Const SQL_OJ_LEFT = 1
  861. Public Const SQL_OJ_RIGHT = 2
  862. Public Const SQL_OJ_FULL = 4
  863. Public Const SQL_OJ_NESTED = 8
  864. Public Const SQL_OJ_NOT_ORDERED = 16
  865. Public Const SQL_OJ_INNER = 32
  866. Public Const SQL_OJ_ALL_COMPARISON_OPS = 64
  867. #End If 'ODBCVER >= &H201
  868. #End If 'ODBCVER >= &H200
  869.  
  870. ' Options for SQLGetStmtOption/SQLSetStmtOption
  871. '
  872. Public Const SQL_QUERY_TIMEOUT = 0
  873. Public Const SQL_MAX_ROWS = 1
  874. Public Const SQL_NOSCAN = 2
  875. Public Const SQL_MAX_LENGTH = 3
  876. Public Const SQL_ASYNC_ENABLE = 4
  877. Public Const SQL_BIND_TYPE = 5
  878.  
  879. #If ODBCVER >= &H200 Then
  880. Public Const SQL_CURSOR_TYPE = 6
  881. Public Const SQL_CONCURRENCY = 7
  882. Public Const SQL_KEYSET_SIZE = 8
  883. Public Const SQL_ROWSET_SIZE = 9
  884. Public Const SQL_SIMULATE_CURSOR = 10
  885. Public Const SQL_RETRIEVE_DATA = 11
  886. Public Const SQL_USE_BOOKMARKS = 12
  887. Public Const SQL_GET_BOOKMARK = 13
  888. Public Const SQL_ROW_NUMBER = 14
  889.  
  890. Public Const SQL_STMT_OPT_MAX = SQL_ROW_NUMBER
  891. #Else
  892. Public Const SQL_STMT_OPT_MAX = SQL_BIND_TYPE
  893. #End If 'ODBCVER >= &H200
  894.  
  895. Public Const SQL_STMT_OPT_MIN = SQL_QUERY_TIMEOUT
  896.  
  897. ' Statement option values & defaults
  898. '
  899. Public Const SQL_QUERY_TIMEOUT_DEFAULT = 0
  900. Public Const SQL_MAX_ROWS_DEFAULT = 0
  901.  
  902. Public Const SQL_NOSCAN_OFF = 0
  903. Public Const SQL_NOSCAN_ON = 1
  904. Public Const SQL_NOSCAN_DEFAULT = SQL_NOSCAN_OFF
  905.  
  906. Public Const SQL_MAX_LENGTH_DEFAULT = 0
  907.  
  908. Public Const SQL_ASYNC_ENABLE_OFF = 0
  909. Public Const SQL_ASYNC_ENABLE_ON = 1
  910. Public Const SQL_ASYNC_ENABLE_DEFAULT = SQL_ASYNC_ENABLE_OFF
  911.  
  912. Public Const SQL_BIND_BY_COLUMN = 0
  913.  
  914. Public Const SQL_CONCUR_READ_ONLY = 1
  915. Public Const SQL_CONCUR_LOCK = 2
  916. Public Const SQL_CONCUR_ROWVER = 3
  917. Public Const SQL_CONCUR_VALUES = 4
  918.  
  919. #If ODBCVER >= &H200 Then
  920. Public Const SQL_CURSOR_FORWARD_ONLY = 0
  921. Public Const SQL_CURSOR_KEYSET_DRIVEN = 1
  922. Public Const SQL_CURSOR_DYNAMIC = 2
  923. Public Const SQL_CURSOR_STATIC = 3
  924. Public Const SQL_CURSOR_TYPE_DEFAULT = SQL_CURSOR_FORWARD_ONLY 'Default value
  925.  
  926. ' SQL_ROWSET_SIZE options
  927. '
  928. Public Const SQL_ROWSET_SIZE_DEFAULT = 1
  929.  
  930. ' SQL_KEYSET_SIZE options
  931. '
  932. Public Const SQL_KEYSET_SIZE_DEFAULT = 0
  933.  
  934. ' SQL_SIMULATE_CURSOR options
  935. '
  936. Public Const SQL_SC_NON_UNIQUE = 0
  937. Public Const SQL_SC_TRY_UNIQUE = 1
  938. Public Const SQL_SC_UNIQUE = 2
  939.  
  940. ' SQL_RETRIEVE_DATA options
  941. '
  942. Public Const SQL_RD_OFF = 0
  943. Public Const SQL_RD_ON = 1
  944. Public Const SQL_RD_DEFAULT = SQL_RD_ON
  945.  
  946. ' SQL_USE_BOOKMARKS options
  947. '
  948. Public Const SQL_UB_OFF = 0
  949. Public Const SQL_UB_ON = 1
  950. Public Const SQL_UB_DEFAULT = SQL_UB_ON
  951. #End If 'ODBCVER >= &H200
  952.  
  953. ' Options for SQLSetConnectOption/SQLGetConnectOption
  954. '
  955. Public Const SQL_ACCESS_MODE = 101
  956. Public Const SQL_AUTOCOMMIT = 102
  957. Public Const SQL_LOGIN_TIMEOUT = 103
  958. Public Const SQL_OPT_TRACE = 104
  959. Public Const SQL_OPT_TRACEFILE = 105
  960. Public Const SQL_TRANSLATE_DLL = 106
  961. Public Const SQL_TRANSLATE_OPTION = 107
  962. Public Const SQL_TXN_ISOLATION = 108
  963. Public Const SQL_CURRENT_QUALIFIER = 109
  964. Public Const SQL_CONNECT_OPT_DRVR_START = 1000
  965. #If ODBCVER >= &H200 Then
  966. Public Const SQL_ODBC_CURSORS = 110
  967. Public Const SQL_QUIET_MODE = 111
  968. Public Const SQL_PACKET_SIZE = 112
  969. Public Const SQL_CONN_OPT_MAX = SQL_PACKET_SIZE
  970. #Else
  971. Public Const SQL_CONN_OPT_MAX = SQL_CURRENT_QUALIFIER
  972. #End If 'ODBCVER >= &H200
  973.  
  974. Public Const SQL_CONN_OPT_MIN = SQL_ACCESS_MODE
  975.  
  976. ' Access mode options
  977. '
  978. Public Const SQL_MODE_READ_WRITE = 0
  979. Public Const SQL_MODE_READ_ONLY = 1
  980. Public Const SQL_MODE_DEFAULT = SQL_MODE_READ_WRITE
  981.  
  982. ' Autocommit options
  983. '
  984. Public Const SQL_AUTOCOMMIT_OFF = 0
  985. Public Const SQL_AUTOCOMMIT_ON = 1
  986. Public Const SQL_AUTOCOMMIT_DEFAULT = SQL_AUTOCOMMIT_ON
  987.  
  988. ' Login timeout options
  989. '
  990. Public Const SQL_LOGIN_TIMEOUT_DEFAULT = 15
  991.  
  992. ' Trace options
  993. '
  994. Public Const SQL_OPT_TRACE_OFF = 0
  995. Public Const SQL_OPT_TRACE_ON = 1
  996. Public Const SQL_OPT_TRACE_DEFAULT = SQL_OPT_TRACE_OFF
  997. Public Const SQL_OPT_TRACE_FILE_DEFAULT = "\\SQL.LOG"
  998.  
  999. ' Cursor options
  1000. '
  1001. #If ODBCVER >= &H200 Then
  1002. Public Const SQL_CUR_USE_IF_NEEDED = 0
  1003. Public Const SQL_CUR_USE_ODBC = 1
  1004. Public Const SQL_CUR_USE_DRIVER = 2
  1005. Public Const SQL_CUR_DEFAULT = SQL_CUR_USE_DRIVER
  1006. #End If 'ODBCVER >= &H200
  1007.  
  1008. ' Column types and scopes in SQLSpecialColumns.
  1009. '
  1010. Public Const SQL_BEST_ROWID = 1
  1011. Public Const SQL_ROWVER = 2
  1012.  
  1013. Public Const SQL_SCOPE_CURROW = 0
  1014. Public Const SQL_SCOPE_TRANSACTION = 1
  1015. Public Const SQL_SCOPE_SESSION = 2
  1016.  
  1017. ' Defines for SQLSetPos
  1018. '
  1019. Public Const SQL_ENTIRE_ROWSET = 0
  1020.  
  1021. Public Const SQL_POSITION = 0
  1022. Public Const SQL_REFRESH = 1
  1023. #If ODBCVER >= &H200 Then
  1024. Public Const SQL_UPDATE = 2
  1025. Public Const SQL_DELETE = 3
  1026. Public Const SQL_ADD = 4
  1027. #End If 'ODBCVER >= &H200
  1028.  
  1029. ' Lock options
  1030. '
  1031. Public Const SQL_LOCK_NO_CHANGE = 0
  1032. Public Const SQL_LOCK_EXCLUSIVE = 1
  1033. #If ODBCVER >= &H200 Then
  1034. Public Const SQL_LOCK_UNLOCK = 2
  1035. #End If 'ODBCVER >= &H200
  1036.  
  1037. ' Level 2 Functions
  1038. '
  1039. ' SQLExtendedFetch "fFetchType" values
  1040. '
  1041. Public Const SQL_FETCH_NEXT = 1
  1042. Public Const SQL_FETCH_FIRST = 2
  1043. Public Const SQL_FETCH_LAST = 3
  1044. Public Const SQL_FETCH_PRIOR = 4
  1045. Public Const SQL_FETCH_ABSOLUTE = 5
  1046. Public Const SQL_FETCH_RELATIVE = 6
  1047. #If ODBCVER >= &H200 Then
  1048. Public Const SQL_FETCH_BOOKMARK = 8
  1049. #End If 'ODBCVER >= &H200
  1050.  
  1051. ' SQLExtendedFetch "rgfRowStatus" element values
  1052. '
  1053. Public Const SQL_ROW_SUCCESS = 0
  1054. Public Const SQL_ROW_DELETED = 1
  1055. Public Const SQL_ROW_UPDATED = 2
  1056. Public Const SQL_ROW_NOROW = 3
  1057. #If ODBCVER >= &H200 Then
  1058. Public Const SQL_ROW_ADDED = 4
  1059. Public Const SQL_ROW_ERROR = 5
  1060. #End If 'ODBCVER >= &H200
  1061.  
  1062. ' Defines for SQLForeignKeys (returned in result set)
  1063. '
  1064. Public Const SQL_CASCADE = 0
  1065. Public Const SQL_RESTRICT = 1
  1066. Public Const SQL_SET_NULL = 2
  1067.  
  1068. ' Defines for SQLProcedureColumns (returned in the result set)
  1069. '
  1070. Public Const SQL_PARAM_TYPE_UNKNOWN = 0
  1071. Public Const SQL_PARAM_INPUT = 1
  1072. Public Const SQL_PARAM_INPUT_OUTPUT = 2
  1073. Public Const SQL_RESULT_COL = 3
  1074. #If ODBCVER >= &H200 Then
  1075. Public Const SQL_PARAM_OUTPUT = 4
  1076. #End If 'ODBCVER >= &H200
  1077.  
  1078. ' Defines for SQLStatistics
  1079. '
  1080. Public Const SQL_INDEX_UNIQUE = 0
  1081. Public Const SQL_INDEX_ALL = 1
  1082. Public Const SQL_ENSURE = 1
  1083. Public Const SQL_QUICK = 0
  1084.  
  1085. ' Defines for SQLStatistics (returned in the result set)
  1086. '
  1087. Public Const SQL_TABLE_STAT = 0
  1088. Public Const SQL_INDEX_CLUSTERED = 1
  1089. Public Const SQL_INDEX_HASHED = 2
  1090. Public Const SQL_INDEX_OTHER = 3
  1091.  
  1092. ' Procedures
  1093. '
  1094. #If ODBCVER >= &H200 Then
  1095. Public Const SQL_PT_UNKNOWN = 0
  1096. Public Const SQL_PT_PROCEDURE = 1
  1097. Public Const SQL_PT_FUNCTION = 2
  1098.  
  1099. ' Procedure columns
  1100. '
  1101. Public Const SQL_PC_UNKNOWN = 0
  1102. Public Const SQL_PC_NON_PSEUDO = 1
  1103. Public Const SQL_PC_PSEUDO = 2
  1104. #End If 'ODBCVER >= &H200
  1105.  
  1106. ' Deprecated public const ants
  1107. '
  1108. Public Const SQL_DATABASE_NAME = 16
  1109. Public Const SQL_FD_FETCH_PREV = SQL_FD_FETCH_PRIOR
  1110. Public Const SQL_FETCH_PREV = SQL_FETCH_PRIOR
  1111. Public Const SQL_CONCUR_TIMESTAMP = SQL_CONCUR_ROWVER
  1112. Public Const SQL_SCCO_OPT_TIMESTAMP = SQL_SCCO_OPT_ROWVER
  1113. Public Const SQL_CC_DELETE = SQL_CB_DELETE
  1114. Public Const SQL_CR_DELETE = SQL_CB_DELETE
  1115. Public Const SQL_CC_CLOSE = SQL_CB_CLOSE
  1116. Public Const SQL_CR_CLOSE = SQL_CB_CLOSE
  1117. Public Const SQL_CC_PRESERVE = SQL_CB_PRESERVE
  1118. Public Const SQL_CR_PRESERVE = SQL_CB_PRESERVE
  1119. Public Const SQL_FETCH_RESUME = 7
  1120. Public Const SQL_SCROLL_FORWARD_ONLY = 0
  1121. Public Const SQL_SCROLL_KEYSET_DRIVEN = -1
  1122. Public Const SQL_SCROLL_DYNAMIC = -2
  1123. Public Const SQL_SCROLL_STATIC = -3
  1124.  
  1125. '*********************************************************
  1126. ' End of the ODBC API constants
  1127. '*********************************************************
  1128.  
  1129. Public ODBCFuncs(2, SQL_EXT_API_LAST) As String
  1130.  
  1131. 'User defined type for SQLGetInfo parameters
  1132. Type GetInfo
  1133.     InfoType As String
  1134.     ReturnType As String
  1135. End Type
  1136.  
  1137. 'Array of GetInfo types
  1138. Public ODBCGetInfo(SQL_INFO_LAST) As GetInfo
  1139.  
  1140. 'End of Declarations section
  1141. '*********************************************************
  1142.  
  1143. Function ODBCAllocateEnv(hEnv As Long)
  1144.  
  1145.     Dim result As Integer
  1146.     Dim saveCursor
  1147.  
  1148.     ODBCLoadFuncs
  1149.     LoadGetInfo
  1150.     ODBCAllocateEnv = SQL_SUCCESS
  1151.  
  1152.     saveCursor = Screen.MousePointer
  1153.     Screen.MousePointer = HOURGLASS
  1154.     result = SQLAllocEnv(hEnv)
  1155.     Screen.MousePointer = DEFAULT
  1156.  
  1157.     If result <> SQL_SUCCESS Then
  1158.         ODBCAllocateEnv = result
  1159.         result = ODBCError("Env", hEnv, 0, 0, result, "Environment Allocation Error")
  1160.         Screen.MousePointer = saveCursor
  1161.         ODBCAllocateEnv = result
  1162.     End If
  1163.     Screen.MousePointer = saveCursor
  1164. End Function
  1165. Function ODBCConnectDriver(hDbc As Long, hstmt As Long, Server As String)
  1166.     'Establish a connection using SQLDriverConnect
  1167.     Dim result As Integer
  1168.     Dim S As String
  1169.     Dim cbOut As Integer, rc As Integer
  1170.     Dim saveCursor
  1171.     
  1172.     saveCursor = Screen.MousePointer
  1173.     Screen.MousePointer = HOURGLASS
  1174.     ODBCConnectDriver = SQL_SUCCESS
  1175.     Screen.MousePointer = DEFAULT
  1176.  
  1177.     result = SQLAllocConnect(ghEnv, hDbc)
  1178.     If result <> SQL_SUCCESS Then
  1179.         ODBCConnectDriver = result
  1180.         result = ODBCError("Dbc", ghEnv, hDbc, 0, result, "Error allocating hDbc connection handle.")
  1181.         Screen.MousePointer = saveCursor
  1182.         Exit Function
  1183.     End If
  1184.      
  1185.     result = SQLDriverConnect(hDbc, GetParent(GetFocus()), S$, Len(S$), Server, Len(Server), cbOut%, SQL_DRIVER_COMPLETE)
  1186.     If result <> SQL_SUCCESS Then
  1187.         ODBCConnectDriver = result
  1188.         result = ODBCError("Dbc", ghEnv, hDbc, 0, result, "Error connecting to driver.")
  1189.         Screen.MousePointer = saveCursor
  1190.         Exit Function
  1191.     End If
  1192.     
  1193.     result = SQLAllocStmt(hDbc, hstmt)
  1194.     If result <> SQL_SUCCESS Then
  1195.         ODBCConnectDriver = result
  1196.         result = ODBCError("Dbc", ghEnv, hDbc, 0, result, "Error allocating statement handle.")
  1197.         Screen.MousePointer = saveCursor
  1198.         Exit Function
  1199.     End If
  1200.  
  1201. End Function
  1202.  
  1203. Function ODBCConnectDS(hEnv As Long, hDbc As Long, hstmt As Long, DataSource As String, UserID As String, Password As String) As Integer
  1204.     Dim result As Integer
  1205.     Dim saveCursor
  1206.  
  1207.     saveCursor = Screen.MousePointer
  1208.     Screen.MousePointer = HOURGLASS
  1209.     ODBCConnectDS = SQL_SUCCESS
  1210.     Screen.MousePointer = DEFAULT
  1211.  
  1212.     result = SQLAllocConnect(hEnv, hDbc)
  1213.     If result <> SQL_SUCCESS Then
  1214.         ODBCConnectDS = result
  1215.         result = ODBCError("Dbc", hEnv, hDbc, 0, result, "Error allocating connection handle.")
  1216.         Screen.MousePointer = saveCursor
  1217.         Exit Function
  1218.     End If
  1219.   
  1220.     result = SQLConnect(hDbc, DataSource, Len(DataSource), UserID, Len(UserID), Password, Len(Password))
  1221.     If result <> SQL_SUCCESS And result <> SQL_SUCCESS_WITH_INFO Then
  1222.         ODBCConnectDS = result
  1223.         result = ODBCError("Dbc", hEnv, hDbc, 0, result, "Error connecting to data source.")
  1224.         Screen.MousePointer = saveCursor
  1225.         Exit Function
  1226.     End If
  1227.   
  1228.     result = SQLAllocStmt(hDbc, hstmt)
  1229.     If result <> SQL_SUCCESS Then
  1230.         ODBCConnectDS = result
  1231.         result = ODBCError("Dbc", hEnv, hDbc, 0, result, "Error allocating statement handle.")
  1232.         Screen.MousePointer = saveCursor
  1233.         Exit Function
  1234.     End If
  1235.   
  1236. End Function
  1237.  
  1238. Function ODBCDisconnectDS(hEnv As Long, hDbc As Long, hstmt As Long) As Integer
  1239.     Dim result As Integer
  1240.     Dim saveCursor
  1241.  
  1242.     ODBCDisconnectDS = SQL_SUCCESS
  1243.   
  1244.     saveCursor = Screen.MousePointer
  1245.     Screen.MousePointer = HOURGLASS
  1246.     
  1247.     If hstmt <> 0 Then
  1248.         result = SQLFreeStmt(hstmt, SQL_DROP)
  1249.         If result <> SQL_SUCCESS Then
  1250.             ODBCDisconnectDS = result
  1251.             result = ODBCError("Env", hEnv, 0, 0, result, "Environment Allocation Error")
  1252.         End If
  1253.     End If
  1254.  
  1255.     If hDbc <> 0 Then
  1256.         result = SQLDisconnect(hDbc)
  1257.         If result <> SQL_SUCCESS Then
  1258.             ODBCDisconnectDS = result
  1259.             result = ODBCError("Env", hEnv, 0, 0, result, "Environment Allocation Error")
  1260.         End If
  1261.     End If
  1262.  
  1263.     If hDbc <> 0 Then
  1264.         result = SQLFreeConnect(hDbc)
  1265.         If result <> SQL_SUCCESS Then
  1266.             ODBCDisconnectDS = result
  1267.             result = ODBCError("Env", hEnv, 0, 0, result, "Environment Allocation Error")
  1268.         End If
  1269.     End If
  1270.     
  1271.     Screen.MousePointer = saveCursor
  1272.  
  1273. End Function
  1274. Function ODBCError(ErrType As String, hEnv As Long, hDbc As Long, hstmt As Long, FuncResult As Integer, CallingMsg As String) As Integer
  1275.     'Returns the original ODBC function call return
  1276.     'ErrTypes:
  1277.     '   "Env" for ODBC environment errors
  1278.     '   "Dbc" for data source connection errors
  1279.     '   "Stmt" for SQL statement errors
  1280.  
  1281.     Dim SQLState As String * 16
  1282.     Dim DSError As Long
  1283.     Dim ErrorMsg As String * 511
  1284.     #If Win32 Then
  1285.         Dim ErrMsgSize As Long
  1286.     #Else
  1287.         Dim ErrMsgSize As Integer
  1288.     #End If
  1289.     Dim result As Integer
  1290.     Dim temp As Integer
  1291.     Dim i As Integer
  1292.     Dim tempStr As String
  1293.  
  1294.     ODBCError = FuncResult
  1295.     SQLState = String$(16, 32)
  1296.     ErrorMsg = String$(SQL_MAX_MESSAGE_LENGTH - 1, 32)
  1297.  
  1298.     Load frmODBCErrors
  1299.     frmODBCErrors.outErrors.AddItem CallingMsg
  1300.     frmODBCErrors.outErrors.Indent(frmODBCErrors.outErrors.ListCount - 1) = 1
  1301.  
  1302.     Select Case FuncResult
  1303.         Case SQL_ERROR
  1304.             tempStr = "SQL_ERROR"
  1305.         Case SQL_INVALID_HANDLE
  1306.             tempStr = "SQL_INVALID_HANDLE"
  1307.         Case SQL_NO_DATA_FOUND
  1308.             tempStr = "SQL_NO_DATA_FOUND"
  1309.         Case SQL_SUCCESS
  1310.             tempStr = "SQL_SUCCESS"
  1311.         Case SQL_SUCCESS_WITH_INFO
  1312.             tempStr = "SQL_SUCCESS_WITH_INFO"
  1313.         Case Else
  1314.             tempStr = "Unidentified error code"
  1315.     End Select
  1316.     frmODBCErrors.outErrors.AddItem "Function call result: " & tempStr
  1317.     frmODBCErrors.outErrors.Indent(frmODBCErrors.outErrors.ListCount - 1) = 2
  1318.     
  1319.     i = 1
  1320.     Do
  1321.         Select Case ErrType
  1322.             Case "Env"
  1323.                 result = SQLError(hEnv, SQL_NULL_HDBC, SQL_NULL_HSTMT, SQLState, DSError, ErrorMsg, Len(ErrorMsg), ErrMsgSize)
  1324.             Case "Dbc"
  1325.                 result = SQLError(hEnv, hDbc, SQL_NULL_HSTMT, SQLState, DSError, ErrorMsg, Len(ErrorMsg), ErrMsgSize)
  1326.             Case "Stmt"
  1327.                 result = SQLError(hEnv, hDbc, hstmt, SQLState, DSError, ErrorMsg, Len(ErrorMsg), ErrMsgSize)
  1328.         End Select
  1329.  
  1330.         If ErrMsgSize > 0 Then
  1331.             frmODBCErrors.outErrors.AddItem "SQLState: " & SQLState
  1332.             frmODBCErrors.outErrors.Indent(frmODBCErrors.outErrors.ListCount - 1) = 2
  1333.             frmODBCErrors.outErrors.AddItem "Data Source Error #: " & Trim$(Str$(DSError))
  1334.             frmODBCErrors.outErrors.Indent(frmODBCErrors.outErrors.ListCount - 1) = 3
  1335.             frmODBCErrors.outErrors.AddItem ParseError(ErrorMsg, 1)
  1336.             frmODBCErrors.outErrors.Indent(frmODBCErrors.outErrors.ListCount - 1) = 4
  1337.             frmODBCErrors.outErrors.AddItem ParseError(ErrorMsg, 2)
  1338.             frmODBCErrors.outErrors.Indent(frmODBCErrors.outErrors.ListCount - 1) = 4
  1339.             frmODBCErrors.outErrors.AddItem ParseError(ErrorMsg, 3)
  1340.             frmODBCErrors.outErrors.Indent(frmODBCErrors.outErrors.ListCount - 1) = 4
  1341.             frmODBCErrors.outErrors.AddItem ParseError(ErrorMsg, 4)
  1342.             frmODBCErrors.outErrors.Indent(frmODBCErrors.outErrors.ListCount - 1) = 4
  1343.         End If
  1344.  
  1345.     Loop Until result <> SQL_SUCCESS
  1346.  
  1347.     'expand all of the outline levels
  1348.     For i = 0 To frmODBCErrors.outErrors.ListCount - 1
  1349.         frmODBCErrors.outErrors.Expand(i) = True
  1350.     Next
  1351.     frmODBCErrors.Show MODAL
  1352.  
  1353. End Function
  1354.  
  1355. Function ODBCFreeEnv(hEnv As Long) As Integer
  1356.     Dim result As Integer
  1357.   
  1358.     ODBCFreeEnv = True
  1359.   
  1360.     If hEnv <> 0 Then
  1361.         result = SQLFreeEnv(hEnv)
  1362.         If result <> SQL_SUCCESS Then
  1363.             ODBCFreeEnv = False
  1364.         End If
  1365.     End If
  1366.  
  1367. End Function
  1368.  
  1369. Private Sub ODBCLoadFuncs()
  1370.     'load the ODBC API function names into the ODBCFuncs array
  1371.     Dim i As Integer
  1372.     
  1373.     'Core ODBC API functions
  1374.     ODBCFuncs(0, 1) = "SQLAllocConnect"
  1375.     ODBCFuncs(0, 2) = "SQLAllocEnv"
  1376.     ODBCFuncs(0, 3) = "SQLAllocStmt"
  1377.     ODBCFuncs(0, 4) = "SQLBindCol"
  1378.     ODBCFuncs(0, 5) = "SQLCancel"
  1379.     ODBCFuncs(0, 6) = "SQLColAttributes"
  1380.     ODBCFuncs(0, 7) = "SQLConnect"
  1381.     ODBCFuncs(0, 8) = "SQLDescribeCol"
  1382.     ODBCFuncs(0, 9) = "SQLDisconnect"
  1383.     ODBCFuncs(0, 10) = "SQLError"
  1384.     ODBCFuncs(0, 11) = "SQLExecDirect"
  1385.     ODBCFuncs(0, 12) = "SQLExecute"
  1386.     ODBCFuncs(0, 13) = "SQLFetch"
  1387.     ODBCFuncs(0, 14) = "SQLFreeConnect"
  1388.     ODBCFuncs(0, 15) = "SQLFreeEnv"
  1389.     ODBCFuncs(0, 16) = "SQLFreeStmt"
  1390.     ODBCFuncs(0, 17) = "SQLGetCursorName"
  1391.     ODBCFuncs(0, 18) = "SQLNumResultCols"
  1392.     ODBCFuncs(0, 19) = "SQLPrepare"
  1393.     ODBCFuncs(0, 20) = "SQLRowCount"
  1394.     ODBCFuncs(0, 21) = "SQLSetCursorName"
  1395.     ODBCFuncs(0, 22) = "SQLSetParam"
  1396.     ODBCFuncs(0, 23) = "SQLTransact"
  1397.     For i = 1 To 23
  1398.         ODBCFuncs(1, i) = "Core"
  1399.     Next
  1400.  
  1401.     'Level 1 ODBC API Functions
  1402.     ODBCFuncs(0, 40) = "SQLColumns"
  1403.     ODBCFuncs(0, 41) = "SQLDriverConnect"
  1404.     ODBCFuncs(0, 42) = "SQLGetConnectOption"
  1405.     ODBCFuncs(0, 43) = "SQLGetData"
  1406.     ODBCFuncs(0, 44) = "SQLGetFunctions"
  1407.     ODBCFuncs(0, 45) = "SQLGetInfo"
  1408.     ODBCFuncs(0, 46) = "SQLGetStmtOption"
  1409.     ODBCFuncs(0, 47) = "SQLGetTypeInfo"
  1410.     ODBCFuncs(0, 48) = "SQLParamData"
  1411.     ODBCFuncs(0, 49) = "SQLPutData"
  1412.     ODBCFuncs(0, 50) = "SQLSetConnectOption"
  1413.     ODBCFuncs(0, 51) = "SQLSetStmtOption"
  1414.     ODBCFuncs(0, 52) = "SQLSpecialColumns"
  1415.     ODBCFuncs(0, 53) = "SQLStatictics"
  1416.     ODBCFuncs(0, 54) = "SQLTables"
  1417.     For i = 40 To 54
  1418.         ODBCFuncs(1, i) = "Level 1"
  1419.     Next
  1420.     
  1421.     'Level 2 ODBC API Functions
  1422.     ODBCFuncs(0, 55) = "SQLBrowseConnect"
  1423.     ODBCFuncs(0, 56) = "SQLColumnPrivileges"
  1424.     ODBCFuncs(0, 57) = "SQLDataSources"
  1425.     ODBCFuncs(0, 58) = "SQLDescribeParam"
  1426.     ODBCFuncs(0, 59) = "SQLExtendedFetch"
  1427.     ODBCFuncs(0, 60) = "SQLForeignKeys"
  1428.     ODBCFuncs(0, 61) = "SQLMoreResults"
  1429.     ODBCFuncs(0, 62) = "SQLNativeSQL"
  1430.     ODBCFuncs(0, 63) = "SQLNumParams"
  1431.     ODBCFuncs(0, 64) = "SQLParamOptions"
  1432.     ODBCFuncs(0, 65) = "SQLPrimaryKeys"
  1433.     ODBCFuncs(0, 66) = "SQLProcedureColumns"
  1434.     ODBCFuncs(0, 67) = "SQLProcedures"
  1435.     ODBCFuncs(0, 68) = "SQLSetPos"
  1436.     ODBCFuncs(0, 69) = "SQLSetScrollOptions"
  1437.     ODBCFuncs(0, 70) = "SQLTablePrivileges"
  1438.     ODBCFuncs(0, 71) = "SQLDrivers"
  1439.     ODBCFuncs(0, 72) = "SQLBindParameter"
  1440.     For i = 55 To 72
  1441.         ODBCFuncs(1, i) = "Level 2"
  1442.     Next
  1443.     
  1444. End Sub
  1445. Private Sub LoadGetInfo()
  1446.     ODBCGetInfo(0).InfoType = "SQL_ACTIVE_CONNECTIONS"
  1447.     ODBCGetInfo(0).ReturnType = "I"
  1448.     ODBCGetInfo(1).InfoType = "SQL_ACTIVE_STATEMENTS"
  1449.     ODBCGetInfo(1).ReturnType = "I"
  1450.     ODBCGetInfo(2).InfoType = "SQL_DATA_SOURCE_NAME"
  1451.     ODBCGetInfo(2).ReturnType = "S"
  1452.     ODBCGetInfo(3).InfoType = "SQL_DRIVER_HDBC"
  1453.     ODBCGetInfo(3).ReturnType = "L"
  1454.     ODBCGetInfo(4).InfoType = "SQL_DRIVER_HENV"
  1455.     ODBCGetInfo(4).ReturnType = "L"
  1456.     ODBCGetInfo(5).InfoType = "SQL_DRIVER_HSTMT"
  1457.     ODBCGetInfo(5).ReturnType = "L"
  1458.     ODBCGetInfo(6).InfoType = "SQL_DRIVER_NAME"
  1459.     ODBCGetInfo(6).ReturnType = "S"
  1460.     ODBCGetInfo(7).InfoType = "SQL_DRIVER_VER"
  1461.     ODBCGetInfo(7).ReturnType = "S"
  1462.     ODBCGetInfo(8).InfoType = "SQL_FETCH_DIRECTION"
  1463.     ODBCGetInfo(8).ReturnType = "B"
  1464.     ODBCGetInfo(9).InfoType = "SQL_ODBC_API_CONFORMANCE"
  1465.     ODBCGetInfo(9).ReturnType = "IP"
  1466.     ODBCGetInfo(10).InfoType = "SQL_ODBC_VER"
  1467.     ODBCGetInfo(10).ReturnType = "S"
  1468.     ODBCGetInfo(11).InfoType = "SQL_ROW_UPDATES"
  1469.     ODBCGetInfo(11).ReturnType = "SY"
  1470.     ODBCGetInfo(12).InfoType = "SQL_ODBC_SAG_CLI_CONFORMANCE"
  1471.     ODBCGetInfo(12).ReturnType = "I"
  1472.     ODBCGetInfo(13).InfoType = "SQL_SERVER_NAME"
  1473.     ODBCGetInfo(13).ReturnType = "S"
  1474.     ODBCGetInfo(14).InfoType = "SQL_SEARCH_PATTERN_ESCAPE"
  1475.     ODBCGetInfo(14).ReturnType = "S"
  1476.     ODBCGetInfo(15).InfoType = "SQL_ODBC_SQL_CONFORMANCE"
  1477.     ODBCGetInfo(15).ReturnType = "I"
  1478.     
  1479.     ODBCGetInfo(17).InfoType = "SQL_DBMS_NAME"
  1480.     ODBCGetInfo(17).ReturnType = "S"
  1481.     ODBCGetInfo(18).InfoType = "SQL_DBMS_VER"
  1482.     ODBCGetInfo(18).ReturnType = "S"
  1483.     
  1484.     ODBCGetInfo(19).InfoType = "SQL_ACCESSIBLE_TABLES"
  1485.     ODBCGetInfo(19).ReturnType = "SY"
  1486.     ODBCGetInfo(20).InfoType = "SQL_ACCESSIBLE_PROCEDURES"
  1487.     ODBCGetInfo(20).ReturnType = "SY"
  1488.     ODBCGetInfo(21).InfoType = "SQL_PROCEDURES"
  1489.     ODBCGetInfo(21).ReturnType = "SY"
  1490.     ODBCGetInfo(22).InfoType = "SQL_CONCAT_NULL_BEHAVIOR"
  1491.     ODBCGetInfo(22).ReturnType = "IP"
  1492.     ODBCGetInfo(23).InfoType = "SQL_CURSOR_COMMIT_BEHAVIOR"
  1493.     ODBCGetInfo(23).ReturnType = "IP"
  1494.     ODBCGetInfo(24).InfoType = "SQL_CURSOR_ROLLBACK_BEHAVIOR"
  1495.     ODBCGetInfo(24).ReturnType = "IP"
  1496.     ODBCGetInfo(25).InfoType = "SQL_DATA_SOURCE_READ_ONLY"
  1497.     ODBCGetInfo(25).ReturnType = "SY"
  1498.     ODBCGetInfo(26).InfoType = "SQL_DEFAULT_TXN_ISOLATION"
  1499.     ODBCGetInfo(26).ReturnType = "LP"
  1500.     ODBCGetInfo(27).InfoType = "SQL_EXPRESSIONS_IN_ORDERBY"
  1501.     ODBCGetInfo(27).ReturnType = "SP"
  1502.     ODBCGetInfo(28).InfoType = "SQL_IDENTIFIER_CASE"
  1503.     ODBCGetInfo(28).ReturnType = "IP"
  1504.     ODBCGetInfo(29).InfoType = "SQL_IDENTIFIER_QUOTE_CHAR"
  1505.     ODBCGetInfo(29).ReturnType = "S"
  1506.     ODBCGetInfo(30).InfoType = "SQL_MAX_COLUMN_NAME_LEN"
  1507.     ODBCGetInfo(30).ReturnType = "I"
  1508.     ODBCGetInfo(31).InfoType = "SQL_MAX_CURSOR_NAME_LEN"
  1509.     ODBCGetInfo(31).ReturnType = "I"
  1510.     ODBCGetInfo(32).InfoType = "SQL_MAX_OWNER_NAME_LEN"
  1511.     ODBCGetInfo(32).ReturnType = "I"
  1512.     ODBCGetInfo(33).InfoType = "SQL_MAX_PROCEDURE_NAME_LEN"
  1513.     ODBCGetInfo(33).ReturnType = "I"
  1514.     ODBCGetInfo(34).InfoType = "SQL_MAX_QUALIFIER_NAME_LEN"
  1515.     ODBCGetInfo(34).ReturnType = "I"
  1516.     ODBCGetInfo(35).InfoType = "SQL_MAX_TABLE_NAME_LEN"
  1517.     ODBCGetInfo(35).ReturnType = "I"
  1518.     ODBCGetInfo(36).InfoType = "SQL_MULT_RESULT_SETS"
  1519.     ODBCGetInfo(36).ReturnType = "SP"
  1520.     ODBCGetInfo(37).InfoType = "SQL_MULTIPLE_ACTIVE_TXN"
  1521.     ODBCGetInfo(37).ReturnType = "S"
  1522.     ODBCGetInfo(38).InfoType = "SQL_OUTER_JOINS"
  1523.     ODBCGetInfo(38).ReturnType = "SP"
  1524.     ODBCGetInfo(39).InfoType = "SQL_OWNER_TERM"
  1525.     ODBCGetInfo(39).ReturnType = "S"
  1526.     ODBCGetInfo(40).InfoType = "SQL_PROCEDURE_TERM"
  1527.     ODBCGetInfo(40).ReturnType = "S"
  1528.     ODBCGetInfo(41).InfoType = "SQL_QUALIFIER_NAME_SEPARATOR"
  1529.     ODBCGetInfo(41).ReturnType = "S"
  1530.     ODBCGetInfo(42).InfoType = "SQL_QUALIFIER_TERM"
  1531.     ODBCGetInfo(42).ReturnType = "S"
  1532.     ODBCGetInfo(43).InfoType = "SQL_SCROLL_CONCURRENCY"
  1533.     ODBCGetInfo(43).ReturnType = "B"
  1534.     ODBCGetInfo(44).InfoType = "SQL_SCROLL_OPTIONS"
  1535.     ODBCGetInfo(44).ReturnType = "B"
  1536.     ODBCGetInfo(45).InfoType = "SQL_TABLE_TERM"
  1537.     ODBCGetInfo(45).ReturnType = "S"
  1538.     ODBCGetInfo(46).InfoType = "SQL_TXN_CAPABLE"
  1539.     ODBCGetInfo(46).ReturnType = "IP"
  1540.     ODBCGetInfo(47).InfoType = "SQL_USER_NAME"
  1541.     ODBCGetInfo(47).ReturnType = "S"
  1542.     
  1543.     ODBCGetInfo(48).InfoType = "SQL_CONVERT_FUNCTIONS"
  1544.     ODBCGetInfo(48).ReturnType = "B"
  1545.     ODBCGetInfo(49).InfoType = "SQL_NUMERIC_FUNCTIONS"
  1546.     ODBCGetInfo(49).ReturnType = "B"
  1547.     ODBCGetInfo(50).InfoType = "SQL_STRING_FUNCTIONS"
  1548.     ODBCGetInfo(50).ReturnType = "B"
  1549.     ODBCGetInfo(51).InfoType = "SQL_SYSTEM_FUNCTIONS"
  1550.     ODBCGetInfo(51).ReturnType = "B"
  1551.     ODBCGetInfo(52).InfoType = "SQL_TIMEDATE_FUNCTIONS"
  1552.     ODBCGetInfo(52).ReturnType = "B"
  1553.                 
  1554.     ODBCGetInfo(53).InfoType = "SQL_CONVERT_BIGINT"
  1555.     ODBCGetInfo(53).ReturnType = "B"
  1556.     ODBCGetInfo(54).InfoType = "SQL_CONVERT_BINARY"
  1557.     ODBCGetInfo(54).ReturnType = "B"
  1558.     ODBCGetInfo(55).InfoType = "SQL_CONVERT_BIT"
  1559.     ODBCGetInfo(55).ReturnType = "B"
  1560.     ODBCGetInfo(56).InfoType = "SQL_CONVERT_CHAR"
  1561.     ODBCGetInfo(56).ReturnType = "B"
  1562.     ODBCGetInfo(57).InfoType = "SQL_CONVERT_DATE"
  1563.     ODBCGetInfo(57).ReturnType = "B"
  1564.     ODBCGetInfo(58).InfoType = "SQL_CONVERT_DECIMAL"
  1565.     ODBCGetInfo(58).ReturnType = "B"
  1566.     ODBCGetInfo(59).InfoType = "SQL_CONVERT_DOUBLE"
  1567.     ODBCGetInfo(59).ReturnType = "B"
  1568.     ODBCGetInfo(60).InfoType = "SQL_CONVERT_FLOAT"
  1569.     ODBCGetInfo(60).ReturnType = "B"
  1570.     ODBCGetInfo(61).InfoType = "SQL_CONVERT_INTEGER"
  1571.     ODBCGetInfo(61).ReturnType = "B"
  1572.     ODBCGetInfo(62).InfoType = "SQL_CONVERT_LONGVARCHAR"
  1573.     ODBCGetInfo(62).ReturnType = "B"
  1574.     ODBCGetInfo(63).InfoType = "SQL_CONVERT_NUMERIC"
  1575.     ODBCGetInfo(63).ReturnType = "B"
  1576.     ODBCGetInfo(64).InfoType = "SQL_CONVERT_REAL"
  1577.     ODBCGetInfo(64).ReturnType = "B"
  1578.     ODBCGetInfo(65).InfoType = "SQL_CONVERT_SMALLINT"
  1579.     ODBCGetInfo(65).ReturnType = "B"
  1580.     ODBCGetInfo(66).InfoType = "SQL_CONVERT_TIME"
  1581.     ODBCGetInfo(66).ReturnType = "B"
  1582.     ODBCGetInfo(67).InfoType = "SQL_CONVERT_TIMESTAMP"
  1583.     ODBCGetInfo(67).ReturnType = "B"
  1584.     ODBCGetInfo(68).InfoType = "SQL_CONVERT_TINYINT"
  1585.     ODBCGetInfo(68).ReturnType = "B"
  1586.     ODBCGetInfo(69).InfoType = "SQL_CONVERT_VARBINARY"
  1587.     ODBCGetInfo(69).ReturnType = "B"
  1588.     ODBCGetInfo(70).InfoType = "SQL_CONVERT_VARCHAR"
  1589.     ODBCGetInfo(70).ReturnType = "B"
  1590.     ODBCGetInfo(71).InfoType = "SQL_CONVERT_LONGVARBINARY"
  1591.     ODBCGetInfo(71).ReturnType = "B"
  1592.     
  1593.     ODBCGetInfo(72).InfoType = "SQL_TXN_ISOLATION_OPTION"
  1594.     ODBCGetInfo(72).ReturnType = "B"
  1595.     ODBCGetInfo(73).InfoType = "SQL_ODBC_SQL_OPT_IEF"
  1596.     ODBCGetInfo(73).ReturnType = "SP"
  1597.     ODBCGetInfo(74).InfoType = "SQL_CORRELATION_NAME"
  1598.     ODBCGetInfo(74).ReturnType = "IP"
  1599.     ODBCGetInfo(75).InfoType = "SQL_NON_NULLABLE_COLUMNS"
  1600.     ODBCGetInfo(75).ReturnType = "IP"
  1601.     #If ODBCVER >= &H200 Then
  1602.     ODBCGetInfo(76).InfoType = "SQL_DRIVER_HLIB"
  1603.     ODBCGetInfo(76).ReturnType = "L"
  1604.     ODBCGetInfo(77).InfoType = "SQL_DRIVER_ODBC_VER"
  1605.     ODBCGetInfo(77).ReturnType = "S"
  1606.     ODBCGetInfo(78).InfoType = "SQL_LOCK_TYPES"
  1607.     ODBCGetInfo(78).ReturnType = "B"
  1608.     ODBCGetInfo(79).InfoType = "SQL_POS_OPERATIONS"
  1609.     ODBCGetInfo(79).ReturnType = "B"
  1610.     ODBCGetInfo(80).InfoType = "SQL_POSITIONED_STATEMENTS"
  1611.     ODBCGetInfo(80).ReturnType = "B"
  1612.     ODBCGetInfo(81).InfoType = "SQL_GETDATA_EXTENSIONS"
  1613.     ODBCGetInfo(81).ReturnType = "B"
  1614.     ODBCGetInfo(82).InfoType = "SQL_BOOKMARK_PERSISTENCE"
  1615.     ODBCGetInfo(82).ReturnType = "B"
  1616.     ODBCGetInfo(83).InfoType = "SQL_STATIC_SENSITIVITY"
  1617.     ODBCGetInfo(83).ReturnType = "B"
  1618.     ODBCGetInfo(84).InfoType = "SQL_FILE_USAGE"
  1619.     ODBCGetInfo(84).ReturnType = "IP"
  1620.     ODBCGetInfo(85).InfoType = "SQL_NULL_COLLATION"
  1621.     ODBCGetInfo(85).ReturnType = "IP"
  1622.     ODBCGetInfo(86).InfoType = "SQL_ALTER_TABLE"
  1623.     ODBCGetInfo(86).ReturnType = "B"
  1624.     ODBCGetInfo(87).InfoType = "SQL_COLUMN_ALIAS"
  1625.     ODBCGetInfo(87).ReturnType = "SP"
  1626.     ODBCGetInfo(88).InfoType = "SQL_GROUP_BY"
  1627.     ODBCGetInfo(88).ReturnType = "IP"
  1628.     ODBCGetInfo(89).InfoType = "SQL_KEYWORDS"
  1629.     ODBCGetInfo(89).ReturnType = "SP"
  1630.     ODBCGetInfo(90).InfoType = "SQL_ORDER_BY_COLUMNS_IN_SELECT"
  1631.     ODBCGetInfo(90).ReturnType = "SY"
  1632.     ODBCGetInfo(91).InfoType = "SQL_OWNER_USAGE"
  1633.     ODBCGetInfo(91).ReturnType = "B"
  1634.     ODBCGetInfo(92).InfoType = "SQL_QUALIFIER_USAGE"
  1635.     ODBCGetInfo(92).ReturnType = "B"
  1636.     ODBCGetInfo(93).InfoType = "SQL_QUOTED_IDENTIFIER_CASE"
  1637.     ODBCGetInfo(93).ReturnType = "IP"
  1638.     ODBCGetInfo(94).InfoType = "SQL_SPECIAL_CHARACTERS"
  1639.     ODBCGetInfo(94).ReturnType = "S"
  1640.     ODBCGetInfo(95).InfoType = "SQL_SUBQUERIES"
  1641.     ODBCGetInfo(95).ReturnType = "B"
  1642.     ODBCGetInfo(96).InfoType = "SQL_UNION"
  1643.     ODBCGetInfo(96).ReturnType = "B"
  1644.     ODBCGetInfo(97).InfoType = "SQL_MAX_COLUMNS_IN_GROUP_BY"
  1645.     ODBCGetInfo(97).ReturnType = "I"
  1646.     ODBCGetInfo(98).InfoType = "SQL_MAX_COLUMNS_IN_INDEX"
  1647.     ODBCGetInfo(98).ReturnType = "I"
  1648.     ODBCGetInfo(99).InfoType = "SQL_MAX_COLUMNS_IN_ORDER_BY"
  1649.     ODBCGetInfo(99).ReturnType = "I"
  1650.     ODBCGetInfo(100).InfoType = "SQL_MAX_COLUMNS_IN_SELECT"
  1651.     ODBCGetInfo(100).ReturnType = "I"
  1652.     ODBCGetInfo(101).InfoType = "SQL_MAX_COLUMNS_IN_TABLE"
  1653.     ODBCGetInfo(101).ReturnType = "I"
  1654.     ODBCGetInfo(102).InfoType = "SQL_MAX_INDEX_SIZE"
  1655.     ODBCGetInfo(102).ReturnType = "L"
  1656.     ODBCGetInfo(103).InfoType = "SQL_MAX_ROW_SIZE_INCLUDES_LONG"
  1657.     ODBCGetInfo(103).ReturnType = "SY"
  1658.     ODBCGetInfo(104).InfoType = "SQL_MAX_ROW_SIZE"
  1659.     ODBCGetInfo(104).ReturnType = "L"
  1660.     ODBCGetInfo(105).InfoType = "SQL_MAX_STATEMENT_LEN"
  1661.     ODBCGetInfo(105).ReturnType = "L"
  1662.     ODBCGetInfo(106).InfoType = "SQL_MAX_TABLES_IN_SELECT"
  1663.     ODBCGetInfo(106).ReturnType = "I"
  1664.     ODBCGetInfo(107).InfoType = "SQL_MAX_USER_NAME_LEN"
  1665.     ODBCGetInfo(107).ReturnType = "I"
  1666.     ODBCGetInfo(108).InfoType = "SQL_MAX_CHAR_LITERAL_LEN"
  1667.     ODBCGetInfo(108).ReturnType = "L"
  1668.     ODBCGetInfo(109).InfoType = "SQL_TIMEDATE_ADD_INTERVALS"
  1669.     ODBCGetInfo(109).ReturnType = "B"
  1670.     ODBCGetInfo(110).InfoType = "SQL_TIMEDATE_DIFF_INTERVALS"
  1671.     ODBCGetInfo(110).ReturnType = "B"
  1672.     ODBCGetInfo(111).InfoType = "SQL_NEED_LONG_DATA_LEN"
  1673.     ODBCGetInfo(111).ReturnType = "SY"
  1674.     ODBCGetInfo(112).InfoType = "SQL_MAX_BINARY_LITERAL_LEN"
  1675.     ODBCGetInfo(112).ReturnType = "L"
  1676.     ODBCGetInfo(113).InfoType = "SQL_LIKE_ESCAPE_CLAUSE"
  1677.     ODBCGetInfo(113).ReturnType = "SY"
  1678.     ODBCGetInfo(114).InfoType = "SQL_QUALIFIER_LOCATION"
  1679.     ODBCGetInfo(114).ReturnType = "IP"
  1680.     #End If
  1681. End Sub
  1682. Private Function ParseError(Message As String, Place As Integer)
  1683.     'Split out the pieces of the ODBC error message
  1684.     'Structure of non-data source Message: [Vendor][ODBC component]Component supplied text
  1685.     'Structure of data source Message: [Vendor][ODBC component][Data Source identifier]Data Source supplied text
  1686.     Dim i As Integer
  1687.     Dim posLeft As Integer
  1688.     Dim posRight As Integer
  1689.     Dim newLeft As Integer
  1690.     Dim textLeft, textRight
  1691.     Dim text As String
  1692.     Static lBrackets(1 To 4) As Integer     'array of left-bracket locations
  1693.     Static Rbrackets(1 To 4) As Integer     'array of right-bracket locations
  1694.     Static msgType As String
  1695.  
  1696.     Message = Trim$(Message)
  1697.     If Message = "" Then
  1698.         ParseError = ""
  1699.         Exit Function
  1700.     End If
  1701.  
  1702.     newLeft = 1
  1703.     If Place = 1 Then                       'new message, so re-parse
  1704.         For i = 1 To 3
  1705.             lBrackets(i) = InStr(newLeft, Message, "[")
  1706.             Rbrackets(i) = InStr(newLeft, Message, "]")
  1707.             newLeft = Rbrackets(i) + 1
  1708.         Next
  1709.         msgType = IIf(lBrackets(3) = 0, "NDS", "DS")
  1710.     End If
  1711.  
  1712.     If lBrackets(Place) > 0 Then       'that term exists as a bracketed item
  1713.         textLeft = lBrackets(Place) + 1
  1714.         textRight = Rbrackets(Place) - 1
  1715.         text = Mid$(Message, textLeft, textRight - textLeft + 1)
  1716.     Else
  1717.         text = Right$(Message, Len(Message) - Rbrackets(Place - 1))
  1718.     End If
  1719.  
  1720.     Select Case Place
  1721.         Case 1
  1722.             ParseError = "Driver Vendor: " & text
  1723.         Case 2
  1724.             ParseError = "ODBC Identifier: " & text
  1725.         Case 3
  1726.             ParseError = IIf(msgType = "DS", "Data Source: ", "") & text
  1727.         Case 4
  1728.             ParseError = "Error: " & text
  1729.         Case Else
  1730.             ParseError = ""
  1731.     End Select
  1732.  
  1733. End Function
  1734.  
  1735.  
  1736.  
  1737.